/**
 * 
 */
package projectg06.grafos;
import static java.lang.System.out;

/**
 * @author David
 *
 */
public class Arco implements Comparable<Object> {
	
	protected Vertice origen;
	protected Vertice destino;
	protected int peso;
	protected boolean esDirigido;
	
	
	public Arco(Vertice v1, Vertice v2){
		this(v1, v2, 0, false);
	}
	
	public Arco(Vertice v1, Vertice v2, int peso){
		this(v1, v2, peso, false);
	}
	
	/**
	 * 
	 */
	public Arco(Vertice v1, Vertice v2, int peso, boolean dirigido) {
		// TODO Auto-generated constructor stub
		this.origen = v1;
		this.destino = v2;
		this.peso = peso;
		this.esDirigido = dirigido;
	}
	
	
	
	public String toString(){
		return "{" + this.origen.obtenerNombre() 
				+ ", " + this.destino.obtenerNombre() + "}";
	}
	
	
	/**
	 * @return the origen
	 */
	public Vertice getOrigen() {
		return origen;
	}

	/**
	 * @param origen the origen to set
	 */
	public void setOrigen(Vertice origen) {
		this.origen = origen;
	}

	/**
	 * @return the destino
	 */
	public Vertice getDestino() {
		return destino;
	}

	/**
	 * @param destino the destino to set
	 */
	public void setDestino(Vertice destino) {
		this.destino = destino;
	}

	/**
	 * @return the peso
	 */
	public int getPeso() {
		return peso;
	}

	/**
	 * @param peso the peso to set
	 */
	public void setPeso(int peso) {
		this.peso = peso;
	}

	/* (non-Javadoc)
	 * @see java.lang.Object#hashCode()
	 */
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((destino == null) ? 0 : destino.hashCode());
		result = prime * result + (esDirigido ? 1231 : 1237);
		result = prime * result + ((origen == null) ? 0 : origen.hashCode());
		return result;
	}

	/* (non-Javadoc)
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (!(obj instanceof Arco))
			return false;
		Arco other = (Arco) obj;
		if (destino == null) {
			if (other.destino != null)
				return false;
		} else if (!destino.equals(other.destino))
			return false;
		if (esDirigido != other.esDirigido)
			return false;
		if (origen == null) {
			if (other.origen != null)
				return false;
		} else if (!origen.equals(other.origen))
			return false;
		return true;
	}

	
	
	public static void main(String args[]){
		Vertice a = new Vertice(0);
		Vertice b = new Vertice(1);
		Vertice c = new Vertice(2, "Juan");
		Vertice d = new Vertice(3);
		
		out.println(a);
		out.println(b);
		out.println(c);
		out.println(d);
		
		Arco ab = new Arco(a,b);
		Arco ba = new Arco(b,a);
		out.println(ab);
		out.println(ba);
		out.println("ab es igual a ba: " + ab.equals(ba));
		
	}

	@Override
	public int compareTo(Object o) {
		// TODO Auto-generated method stub
		return this.peso - ((Arco)o).peso;
	}

}
